//
//  SafeMethods.h
//  DLClassCategoryDemo
//
//  Created by David Lee on 13-10-17.
//  Copyright (c) 2013年 David Lee. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSArray (safe)
- (id)objectAtIndexSafe:(NSUInteger)index;
@end

@interface NSObject (safe)
// 注意：会将对象指针置为nil
- (void)releaseSafe;

// 缓存方法
- (id)objectFromCache:(NSString *)cacheName;
- (BOOL)saveToCache:(NSString *)cacheName;
+ (BOOL)clearCacheWithName:(NSString *)cacheName;
// @param cacheNames 一个包含NSString的数组
+ (void)clearCacheWithNames:(NSArray *)cacheNames;
// 注意：这个方法会清除所有缓存
+ (void)clearAllCache;
@end

@interface UIView (safe)
// 便捷更改frame
- (void)setOriginX:(int)originX;
- (void)setOriginY:(int)originY;
- (void)setWidth:(int)width;
- (void)setHeight:(int)height;

// 用于解决在Retina屏幕上非整数的frame导致的模糊问题
- (void)clearFloatFrame;

// 线性布局
// 注意：所有的subViews会按照顺序线性向下紧凑布局,从Y坐标0开始
// 建议放在UIScrollView里
// 不会更改本View的属性，例如UIScrollView的contentSize
// 只会更改subViews的frame的origin.y
// 返回理想页面高度
- (CGFloat)linearLayout;

// 关联性的改变UIView的高度
// 把origin.y小于本view的view根据self改变的高度调整位置
// 在linearLayout里不会改变和其它view的间距
// 适用于动态高度的页面,对于与self有重叠部分的view不起作用
- (void)setHeightAssociated:(int)height;

// 类似于linearLayout
// 每个使用此方法添加的view都会被添加到所有view的下面
// origin.y从0开始
// 适用于之前没有使用linearLayout的view
// 效率低于linearLayout
- (void)addSubviewCompact:(UIView *)view;
@end


@interface NSString (safe)

- (BOOL)emptyOrNullString;

@end
